#include <bits/stdc++.h>
using namespace std;
using ll = long long;

const ll mod = 1e9 + 7;
const int N = 1e5 + 100;
/**
 *
 * 分块
 * bl 每个块的左端点
 * br 块右端点
 * gnum 组的数量
 * bnum 组内元素数量
 * gid 组编号
 */
int bl[N], br[N], gnum, bnum, gid[N];
void init_b(int n)
{
  bnum = sqrt(n) + 1; // +1防止为0

  for (int i = 1; i <= n; i += bnum) // 以块为单位 +=bnum
  {
    gnum++; // 移动组指针

    // 初始化组的上下限属性
    bl[gnum] = i;
    br[gnum] = min(n, i + bnum - 1); // 防止最后一个组元素不够
    for (int j = bl[gnum]; j <= br[gnum]; ++j)
      gid[j] = gnum; // 给每个元素打上组标记
  }
  return;
}
int a[N], sum[N], n;
int get_sum(int l, int r)
{
  // 暴力求解每一个区间和值
  int res = 0;
  for (int i = l; i <= r; i++)
    res += a[i];
  return res;
}

int main()
{
  ios::sync_with_stdio(0), cin.tie(0);
  cin >> n;
  init_b(n);
  for (int i = 1; i <= n; i++)
  {
    cin >> a[i];
    sum[gid[i]] += a[i]; // 给对应组加上值
  }
  int m, op, x, y;
  cin >> m;
  while (m--)
  {
    cin >> op >> x >> y;
    if (op == 1) // 加数操作
    {
      a[x] += y;
      sum[gid[x]] += y;
    }
    else if (op == 2)
    {
      if (gid[x] == gid[y]) // 组内求和
        cout << get_sum(x, y) << '\n';
      else
      {
        int res = 0;
        for (int i = gid[x] + 1; i < gid[y]; i++) // 求区间内组的和
          res += sum[i];
        res += get_sum(x, br[gid[x]]);
        res += get_sum(bl[gid[y]], y);
        cout << res << '\n';
      }
    }
  }
  return 0;
}
